/**
 * @file CCdiant.h
 * @brief Fichier d'entête du module CC.
 *
 * @author Mohammad NOROUZZADEH, Lotfi, Saleh
 */
#ifndef _ENSEIGNE_H
#define _ENSEIGNE_H


/* ********************************************************************* */
/*                                                                       */
/*                       Librairies de ENSEIGNE                       */
/*                                                                       */
/* ********************************************************************* */
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>


#include "Enseignant.h"
#include "UE.h"
#include "Chemin.h"

/*Structure de controle sur les ue enseigné par un  enseignant  et  sa  capacité    a   enseigne */
struct sEnseigne
{
int numEns;
int codeUe;
int ensCm;
int ensTd;
int ensTp;
};

typedef struct sEnseigne Enseigne;

struct  sTabEnseigne
{
    Enseigne**   tabEnseigne;
    int nbEnseigne;
};

typedef struct  sTabEnseigne    TabEnseigne;
/*return  une   structure   enseigne    initialisé  */
Enseigne * creEnseigne(int numEns,int codeUe,int ensCm,int ensTd,int ensTp);

/*initialise    une structure   enseigne   non  initialisé */
void initEnseigne(Enseigne*enseigne,int numEns,int codeUe,int ensCm,int ensTd,int ensTp);

void libereEnseigne(Enseigne*enseigne);

void detEnseigne(Enseigne ** enseigne);

/*Sauvegarde une    structure   enseigne*/
void saveEnseigne(Enseigne*enseigne);

/*Sauvegarde les    attributs  d'une    structure   enseigne         */
void saveEnseigneParElement(int numEns,int codeUe,int ensCm,int ensTd,int ensTp);

/*retourne  les enseigants  d'une  ue*/
TabEnseignant* recEnseignantParUe(UE *ue);

TabEnseignant *recEnseignantParCodeUE(int codeUe);

/*retourne  les ue  enseigné    par un  enseigant*/
TabUe   *   recUeEnseigne(Ens *Ens);

TabUe* recUeEnseigneParNumEns(int numEns);

TabEnseigne*    recEnseigne(Ens*ens);

TabEnseigne*    recEnseigneParNumEns(int    numEns);

Enseigne* recEnseigneParCodeUeNumEns(int numEns,int codeUe);


int modifEnseigne(Ens*enseignant,UE*ue,int ensCM,int ensTD,int ensTP);


int  mdfEnseigne(Enseigne *enseigne,int ensCm,int ensTd,int ensTp);

int  mdfEnseigneParElement(int numEns,int codeUe,int ensCm,int ensTd,int ensTp);

void  saveEnseignePourUe(Ens*enseignant,UE*ue,int  ensCM,int   ensTD,int   ensTP);

int supEnseigne( Enseigne*enseigne);

int supEnseigneParId( int  numEns,int  codeUe );

int getNbGroupeUe(UE *ue);


#endif
